001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Nov 28, 2002
005     * Time: 12:45:22 AM
006     */
007    
008    package EVolve.visualization.XYViz.RefRefViz;
009    
010    import EVolve.visualization.XYViz.XYVisualization;
011    import EVolve.visualization.*;
012    import EVolve.visualization.Dimension;
013    import EVolve.Scene;
014    import EVolve.exceptions.NoDataPlotException;
015    
016    import java.util.ArrayList;
017    import java.util.HashMap;
018    
019    public abstract class ReferenceReferenceVisualization extends XYVisualization{
020        protected ReferenceDimension xAxis, yAxis;
021        protected ValueDimension zAxis; // used as correlation
022        protected int[][] value; // value of the points
023        protected String[] info;
024        protected static int SELECT_OPTION;
025    
026    
027        public Dimension[] createDimension() {
028            value = null;
029            xAxis = new ReferenceDimension();
030            yAxis = new ReferenceDimension();
031            zAxis = null;
032            info = new String[3];
033    
034            Dimension[] returnVal = new Dimension[2];
035            returnVal[0] = xAxis;
036            returnVal[1] = yAxis;
037    
038            SELECT_OPTION = 0x0011;
039            return returnVal;
040        }
041    
042        protected void updateConfiguration() {
043            canvas.setName(xAxis.getName(), yAxis.getName());
044            super.updateConfiguration();
045        }
046    
047        public void preVisualize() {
048            timeMap.clear();
049        }
050    
051        public ReferenceDimension getLinkableDimension(int dim) {
052            if (dim > 1)
053                return null;
054            return (ReferenceDimension)dimension[dim];
055        }
056    
057        public void makeSelection() {
058            if (SELECT_OPTION == 0) {
059                Scene.showErrorMessage("Nothing will be selected, please check Selection menu.");
060                return;
061            }
062    
063            if (dataSourceId != Scene.getDataSourceManager().getCurrentDataSourceId()) {
064                Scene.showErrorMessage("The active data source used currently is different from \n" +
065                                       "this visualization, please choose \"" +
066                                       Scene.getDataSourceManager().getUsedDataSourceName(dataSourceId)+"\".");
067                return;
068            }
069    
070            int x1 = canvas.getStartX();
071            int x2 = canvas.getEndX();
072            int y1 = canvas.getEndY();
073            int y2 = canvas.getStartY();
074    
075            if (((x1<0)&&(x2<0)) || ((x1>=xAxis.getEntityNumber()))&&(x2>=xAxis.getEntityNumber()) ||
076                ((y1<0)&&(y2<0)) || ((y1>=yAxis.getEntityNumber())&&(y2>=yAxis.getEntityNumber())))
077               return;
078    
079            if (x1 < 0) {
080                x1 = 0;
081            }
082    
083            if (x2 > (xAxis.getEntityNumber() - 1)) {
084                x2 = xAxis.getEntityNumber() - 1;
085            }
086    
087            if (y1 < 0) {
088                y1 = 0;
089            }
090    
091            if (y2 > (yAxis.getEntityNumber() - 1)) {
092                y2 = yAxis.getEntityNumber() - 1;
093            }
094    
095            int[] selection = null;
096            switch (SELECT_OPTION & 0xf0f0) {
097                case 0x1000: // select occurred entities on x axis
098                    ArrayList idList = new ArrayList();
099                    for (int i=x1; i<=x2; i++) {
100                        for (int j=y1; j<=y2; j++) {
101                            if (image.getSortedColor(xAxis,yAxis,i,j) != null)
102                                idList.add(new Integer(i));
103                        }
104                    }
105                    selection = new int[idList.size()];
106                    for (int i=0; i<idList.size(); i++)
107                        selection[i] = ((Integer)idList.get(i)).intValue();
108                    xAxis.makeSelection(subjectDefinition.getType(),selection);
109                    break;
110                case 0x0010: // select all entities on x axis
111                    selection = new int[x2-x1+1];
112                    for (int i=x1; i<=x2; i++)
113                        selection[i-x1] = i;
114                    xAxis.makeSelection(subjectDefinition.getType(),selection);
115                    break;
116                case 0x0000: // x axis is not seletcted
117                    /*x1 = 0;
118                    x2 = xAxis.getEntityNumber() - 1;
119                    selection = new int[x2-x1+1];
120                    for (int i=0; i<=x2; i++)
121                        selection[i] = i;*/
122                    break;
123            }
124    
125            switch (SELECT_OPTION & 0x0f0f) {
126                case 0x0100: //select occurred entities
127                    ArrayList idList = new ArrayList();
128                    for (int i=x1; i<=x2; i++) {
129                        for (int j=y1; j<=y2; j++) {
130                            if (image.getSortedColor(xAxis,yAxis,i,j) != null)
131                                idList.add(new Integer(i));
132                        }
133                    }
134                    selection = new int[idList.size()];
135                    for (int i=0; i<idList.size(); i++)
136                        selection[i] = ((Integer)idList.get(i)).intValue();
137                    yAxis.makeSelection(subjectDefinition.getType(),selection);
138                    break;
139                case 0x0001: // select all entities
140                    selection = new int[y2-y1+1];
141                    for (int i=y1; i<=y2; i++)
142                        selection[i-y1] = i;
143                    yAxis.makeSelection(subjectDefinition.getType(),selection);
144                    break;
145                case 0x0000:
146                    /*y1 = 0;
147                    y2 = yAxis.getEntityNumber() - 1;
148                    selection = new int[y2-y1+1];
149                    for (int i=0; i<=y2; i++)
150                        selection[i] = i;*/
151                    break;
152            }
153    
154        }
155    
156        /**
157         * Mouse moved.
158         *
159         * @param   x position on X-axis
160         * @param   y position on Y-axis
161         */
162        protected void mouseMove(int x, int y) {
163            int X = canvas.getImageX(x);
164            int Y = canvas.getImageY(y);
165    
166            if ((X >= 0) && (X < xAxis.getEntityNumber()) && (Y >= 0) && (Y < yAxis.getEntityNumber())) {
167    
168                if (shift_pressed && (image.getSortedColor(xAxis,yAxis,X,Y)==null))
169                    Scene.setStatus("  ");
170                else {
171                    if (value == null)
172                        Scene.setStatus(info[0] + xAxis.getEntity(X).getName() + info[1] +
173                                         yAxis.getEntity(Y).getName() + info[2]);
174                    else {
175                        HashMap mapX = xAxis.getEntityName2IntMap();
176                        HashMap mapY = yAxis.getEntityName2IntMap();
177                        String xName = xAxis.getEntity(X).getName(), yName = yAxis.getEntity(Y).getName();
178                        Scene.setStatus(info[0] + xName + info[1] + yName +
179                                        info[2] + value[((Integer)mapX.get(xName)).intValue()][((Integer)mapY.get(yName)).intValue()]);
180                    }
181                }
182            } else {
183                Scene.setStatus(" ");
184            }
185        }
186    
187        public void sort() {
188            try {
189                int before1 = xAxis.getEntityNumberBeforeLink();
190                int before2 = xAxis.getEntityNumberBeforeLink();
191                canvas.setName(xAxis.getName() + " (" + ((before1 == -1) ? "" : (""+before1+" / "))
192                               + xAxis.getEntityNumber() +
193                               ", " + xAxis.getSelectedComparatorName() + ")",
194                               yAxis.getName() + " (" + ((before2 == -1) ? "" : (""+before2+" / "))
195                               + yAxis.getEntityNumber() +
196                               ", " + yAxis.getSelectedComparatorName() + ")");
197                canvas.setImage(image.getSortedImage(xAxis, yAxis).getImage());
198                canvas.repaint();
199                enableBrowseSourceMenu();
200            } catch (NoDataPlotException e) {
201                Scene.showErrorMessage(e.getMessage());
202            }
203        }
204    
205        protected void changeOrientation() {
206            super.changeOrientation();
207            ReferenceDimension temp = xAxis;
208            xAxis = yAxis;
209            yAxis = temp;
210            String tempInfo = info[0];
211            info[0] = info[1];
212            info[1] = tempInfo;
213            sort();
214        }
215    
216        public int[][] getValue() {
217            return value;
218        }
219    
220        public void setValue(int[][] newValue) {
221            value = newValue;
222        }
223    
224        protected String getEntityUnderMouse() {
225            return null;
226        }
227    
228        public Object clone() {
229            ReferenceReferenceVisualization o = null;
230    
231            o = (ReferenceReferenceVisualization)super.clone();
232            o.xAxis = (ReferenceDimension)xAxis.clone();
233            o.yAxis = (ReferenceDimension)yAxis.clone();
234            o.zAxis = (ValueDimension)zAxis.clone();
235            o.dimension[0] = o.xAxis;
236            o.dimension[1] = o.yAxis;
237            o.dimension[2] = o.zAxis;
238            o.createMenu();
239            if (value != null) {
240                o.value = new int[value.length][];
241                for (int i=0; i<value.length; i++) {
242                    o.value[i] = new int[value[i].length];
243                    for (int j=0; j<value[i].length; j++)
244                        o.value[i][j] = value[i][j];
245                }
246            }
247            if (info != null) {
248                o.info = new String[info.length];
249                for (int i=0; i<info.length; i++)
250                    o.info[i] = info[i];
251            }
252            o.panelConfiguration = o.createConfigurationPanel();
253            o.createDialog();
254            return o;
255        }
256    }